#include <iostream>
#include <vector>

using namespace std;

// 209 长度最小的子数组
// 给定一个整型数组和一个数字s，找到数组中最短的一个连续子数组，使得连续子数组的数字和sum >= s，返回这个最短的连续子数组的长度值。
//- 如，给定数组[2, 3, 1, 2, 4, 3], s = 7
//- 答案为[4, 3]，返回 2
// https://leetcode.cn/problems/minimum-size-subarray-sum/description/

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int l = 0, r = -1;   // nums[l...r]为我们的滑动窗口。初始化窗口中不包含任何元素
        int sum = 0;
        int res = nums.size() + 1;  // 初始化的时候设置为最大的值（不可能取到的值）
        // 以下为窗口滑动的过程
        while( l < nums.size()) {
            if( r+1 < nums.size() && sum < target) {
                r++;    // 右边界往前拓展
                sum += nums[r];
            } else {
                sum -= nums[l];
                l++;    // 左边界往前走一步
            }

            if(sum >= target)
                res = min(res, r-l+1);
        }

        if(res == nums.size() + 1)
            return 0;

        return res;
    }
};
int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}
